package com.pxx.pj.pxx.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.pxx.pj.common.annotation.RequiredLog;
import com.pxx.pj.common.exception.ServiceException;
import com.pxx.pj.common.pojo.CheckBox;
import com.pxx.pj.common.pojo.PageObject;
import com.pxx.pj.common.util.ValidUitls;
import com.pxx.pj.pxx.dao.PxxRoleDao;
import com.pxx.pj.pxx.dao.PxxRoleMenuDao;
import com.pxx.pj.pxx.pojo.PxxRole;
import com.pxx.pj.pxx.pojo.PxxRoleMenu;
import com.pxx.pj.pxx.service.PxxRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PxxRoleServiceImpl implements PxxRoleService {


    @Autowired
    private PxxRoleDao pxxRoleDao;
    @Autowired
    private PxxRoleMenuDao pxxRoleMenuDao;

    //查询角色
    @Override
    public List<CheckBox> findObjects() {
        return pxxRoleDao.findObjects();
    }

    //更新 角色信息
    //查询
    @Override
    public PxxRoleMenu findById(Integer id) {
        //1.参数校验
        ValidUitls.isArgsValid(id==null||id<1,"id值不正确");
        //2.查询角色自身信息
        PxxRoleMenu roleMenu = pxxRoleDao.findById(id);//connection
        //4.返回查询结果
        return roleMenu;
    }
    //更新
    @RequiredLog("保存角色")
    @Override
    public int updateObject(PxxRole entity, Integer[] mendIds) {
        //1.参数校验
        //2.保存角色自身信息
        int rows=pxxRoleDao.updateObject(entity);
        //3.保存角色对应的菜单信息
        pxxRoleMenuDao.deleteObjectsRoleById(entity.getId());
        pxxRoleMenuDao.insertObjects(entity.getId(), mendIds);
        //要进行事物控制
        return rows;
    }

    //保存角色 以及 角色对应  菜单信息
    @RequiredLog("保存角色")
    @Override
    public int saveObject(PxxRole entity, Integer[] mendIds) {
        //1.参数校验
        //2.保存角色自身信息
        System.out.println("entity.id="+entity.getId());
        int rows=pxxRoleDao.insertObject(entity);
        System.out.println("entity.id="+entity.getId());
        //3.保存角色对应的菜单信息
        pxxRoleMenuDao.insertObjects(entity.getId(), mendIds);
        //要进行事物控制
        return rows;
    }

    //角色管理  分页
    @RequiredLog("查询角色")
    @Override
    public PageObject<PxxRole> findPageObjects(String name, Integer pageCurrent) {
        //1.参数校验
        //把参数校验写到一个工具类里
        ValidUitls.isArgsValid(pageCurrent==null||pageCurrent<1 ,"当前页码值不正确");
         //2.查询总记录数并校验
        int rowCount = pxxRoleDao.getRowCount(name);
        ValidUitls.isResultValid(rowCount==0,"没有找到对应记录");
        //3.查询当前页记录
        int pageSize=3;
        int startIndex=(pageCurrent-1)*pageSize;
        List<PxxRole> records = pxxRoleDao.findPageObjects(name,startIndex,pageSize);
        //4.对查询结果进行封装
        return new PageObject<>(rowCount,records,pageCurrent,pageSize);
    }

    @Override
    public int deleteObjectsById(Integer id) {
        //1.参数校验
        if(id==null||id==0)
            throw new IllegalArgumentException("必须提供正确的id值");
        //2.基于id删除
        int rows=pxxRoleDao.deleteObjectsById(id);
        //3.校验结果并返回
        if(rows==0)
            throw new ServiceException("记录可能已经不存在");
        return rows;
    }

}
